/*
Array.prototype.reduce()  是 JavaScript 数组原型对象上的内置方法，用于对数组中的每个元素执行指定的函数，并将其结果汇总为单个值
其中， callback  函数用于处理每个元素，它可以接受四个参数：累加器、当前元素、当前元素的索引和原始数组本身。
accumulator  是一个累加器，它的值会在每次处理中被更新，并最终成为  reduce()方法的返回值。
currentValue  是当前元素的值。如果提供了initialValue参数，则第一次调用 callback  函数时，累加器的初始值为initialValue，否则累加器的初始值为数组中的第一个元素。
callback 函数必须返回一个值，它会被作为下一次调用  callback  函数的  accumulator  参数传入。
如果省略  initialValue ，则从数组的第二个元素开始执行 callback 函数，否则从第一个元素开始。
 */
Array.prototype.myReduce = function (callback, initialValue = undefined) {
    // 省略非函数判断
    let start
    let pre
    if (initialValue === undefined) {
        start = 1
        pre = this[0]
    }
    else {
        start = 0
        pre = initialValue
    }
    for (let i = start; i < this.length; i ++) {
        pre = callback(pre,this[i],i,this)
    }
    return pre
}
const numbers = [1, 2, 3, 4, 5];
console.log(numbers.myReduce((a, b) => a + b,10));
